import ffmpy
import pathlib


def stream_format_convert(sf, df, option=None):
    ff = ffmpy.FFmpeg(executable="ffmpeg",
                      inputs={sf: None},
                      global_options=['-y'],
                      outputs={df: option})
    ff.run()


def cut_voice_file(file, dpath='.', dtype='wav', segment_time=30):
    '音频文件切割为小块'
    #segment 为分段时长,默认30秒
    #文件保存于dpath路径,返回result文件列表(generator)

    df = f'output.{dtype}'
    #转换格式
    p = pathlib.Path(dpath)
    stream_format_convert(file, df, '-ar 16000')

    #切割文件
    ff_split = ffmpy.FFmpeg(
        inputs={df: None},
        global_options=['-y'],
        outputs={
            str(p / 'temp_%d.wav'):
            f'-f segment -segment_time {segment_time} -c copy'
        })
    ff_split.run()
    pathlib.Path(df).unlink()
    l=list( p.glob(f'temp_*.{dtype}'))
    l.sort(key=lambda x:int(str(x).split('_')[-1].split('.')[0]))
    return l
    

